package com.esun.util.wheel.widget;

import java.util.ArrayList;

/**
 * Numeric Wheel adapter.
 */
public class NumericWheelAdapter implements WheelAdapter {

	/** The default min value */
	public static final int DEFAULT_MAX_VALUE = 9;

	/** The default max value */
	private static final int DEFAULT_MIN_VALUE = 0;

	// Values
	private int minValue;
	private int maxValue;

	// format
	// private String format;

	// expect list
	private ArrayList<String> expectList = new ArrayList<String>();

	/**
	 * Default constructor
	 */
	public NumericWheelAdapter() {
		this(DEFAULT_MIN_VALUE, DEFAULT_MAX_VALUE);
	}

	/**
	 * Constructor
	 * 
	 * @param minValue
	 *            the wheel min value
	 * @param maxValue
	 *            the wheel max value
	 */
	public NumericWheelAdapter(int minValue, int maxValue) {
		this(minValue, maxValue, null);
	}

	/**
	 * Constructor
	 * 
	 * @param list
	 *            the wheel expect list
	 */
	public NumericWheelAdapter(ArrayList<String> list) {

		for (int i = 1; i < list.size(); i++) {
			expectList.add(list.get(i));
		}
		maxValue = Integer.parseInt(expectList.get(expectList.size() - 1));
		minValue = Integer.parseInt(expectList.get(0));

	}

	/**
	 * Constructor
	 * 
	 * @param minValue
	 *            the wheel min value
	 * @param maxValue
	 *            the wheel max value
	 * @param format
	 *            the format string
	 */
	public NumericWheelAdapter(int minValue, int maxValue, String format) {
		this.minValue = minValue;
		this.maxValue = maxValue;
		// this.format = format;
	}

	@Override
	public String getItem(int index) {
		// if (index >= 0 && index < getItemsCount()) {
		// int value = minValue + index;
		// return format != null ? String.format(format, value) : Integer.toString(value);
		// }

		if (index >= 0 && index < getItemsCount()) {
			String value = expectList.get(index);
			return value;
		}

		return null;
	}

	@Override
	public int getItemsCount() {
		// return maxValue - minValue + 1;
		return expectList.size();
	}

	@Override
	public int getMaximumLength() {
		int max = Math.max(Math.abs(maxValue), Math.abs(minValue));
		int maxLen = Integer.toString(max).length();
		if (minValue < 0) {
			maxLen++;
		}
		return maxLen;
	}
}
